import { Canvas, find, Node } from 'cc';
import { DEBUG } from 'cc/env';

/**
 * Cocos Creator Canvas组件相关拓展
 */
export default class CanvasExt {

    /**
     * 获取当前场景下的首个名称为Canvas的节点
     */
    static get canvasNode(): Node {
        return find('Canvas');
    }

    /**
     * 获取当前场景下首个Canvas组件
     */
    static get canvas(): Canvas {
        return CanvasExt.canvasNode?.getComponent(Canvas);
    }

    /**
     * 在当前场景下的首个Canvas下，添加一个子节点。
     * @param child - the child node to be added
     */
    static addChild(child: Node): void {
        if (!CanvasExt.canvasNode)
            DEBUG && console.debug("[cocos-ext] 当前场景下缺少'Canvas'节点!");
        if (child && child.isValid)
            CanvasExt.canvasNode.addChild(child);
    }

    /**
     * 通过名称获取节点的子节点。
     * @param name - A name to find the child node.
     * @return a CCNode object whose name equals to the input parameter
     * @example
     * ```
     * var child = node.getChildByName("Test Node");
     * ```
     */
    static getChildByName(name: string): Node | null {
        if (!CanvasExt.canvasNode)
            DEBUG && console.debug("[cocos-ext] 当前场景下缺少'Canvas'节点!");
        return CanvasExt.canvasNode.getChildByName(name);
    }

    /**
     * 返回当前场景下首个Canvas内的所有子节点列表
     */
    static get children(): Node[] {
        return CanvasExt.canvasNode ? CanvasExt.canvasNode.children : [];
    }

}
